package main;
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 

import java.lang.reflect.Method;
import java.math.BigInteger;
import java.util.Random;

import main.bots.Methods;
import main.constants.Constants;



public final class Stream extends NodeSub {
	public Random rand = new Random();
	
	public static Stream create()
	{
		synchronized(nodeList)
		{
			Stream stream = null;
			if(anInt1412 > 0)
			{
				anInt1412--;
				stream = (Stream) nodeList.popHead();
			}
			if(stream != null)
			{
				stream.currentOffset = 0;
				return stream;
			}
		}
		Stream stream_1 = new Stream();
		stream_1.currentOffset = 0;
		stream_1.buffer = new byte[5000];
		return stream_1;
	}

	private Stream()
	{
	}
	public void atInventoryItem(int id, int slot) {
		fakeMouse();
		int k = Constants.INTERFACE_INVENTORY;
		createFrame(122);
		method433(Constants.INTERFACE_INVENTORY);
		method432(slot);
		method431(id);
		Methods.getClientToUse().atInventoryLoopCycle = 0;
		Methods.getClientToUse().atInventoryInterface = k;
		Methods.getClientToUse().atInventoryIndex = slot;
		Methods.getClientToUse().atInventoryInterfaceType = 2;
		if(RSInter.interfaceCache[k].parentID == Methods.getClientToUse().openInterfaceID)
			Methods.getClientToUse().atInventoryInterfaceType = 1;
		if(RSInter.interfaceCache[k].parentID == Methods.getClientToUse().backDialogID)
			Methods.getClientToUse().atInventoryInterfaceType = 3;
	}
public void attackNpc(int slotId) {
		fakeMouse();
		createFrame(72);
		method432(slotId);
	}
	public Stream(byte abyte0[])
	{
		buffer = abyte0;
			currentOffset = 0;
	}
	  private boolean annoyingPacket(int j) {
			int packets[] = { 164, 3, 0, 241, 86, 98, 77 };
			for(int i = 0; i < packets.length; i++) {
				if(packets[i] == j) {
					
				
					return true;
				}
			}
			return false;
		}
	  public void dropItem(int id, int slot) {
		  fakeMouse();
		  int k = Constants.INTERFACE_INVENTORY;
	 createFrame(87);
	method432(id);
	writeWord(k);
	method432(slot);
	Methods.getClientToUse().atInventoryLoopCycle = 0;
	Methods.getClientToUse().atInventoryInterface = k;
	Methods.getClientToUse().atInventoryIndex = slot;
	Methods.getClientToUse().atInventoryInterfaceType = 2;
	if(RSInter.interfaceCache[k].parentID == Methods.getClientToUse().openInterfaceID)
		Methods.getClientToUse().atInventoryInterfaceType = 1;
	if(RSInter.interfaceCache[k].parentID == Methods.getClientToUse().backDialogID)
		Methods.getClientToUse().atInventoryInterfaceType = 3;
	  }
	  public void dropItem(int id) {
		  dropItem(id, Methods.getInventorySlot(id));
	  }
	public void createFrame(int i)
	{
		if(!annoyingPacket(i))
			System.out.println("Packet Id: " + i);
		buffer[currentOffset++] = (byte)(i + encryption.getNextKey());
	}

	/**
	 * Used to send a fake mouse button, use for most things delta
	 */
	public void fakeMouse() {
		createFrame(241);
		writeDWord(rand.nextInt());
	}
	/**
	 * @param objectId
	 * @param x
	 * @param y
	 * Used for theiving mostly.
	 */
	public void clickObject252(int objectId, int x, int y) {
		fakeMouse();
		createFrame(252);
		method433(objectId);
		method431(y);
		method432(x);
	}
	
	public void clickObject132(int objectId, int x, int y) {
		fakeMouse();
		createFrame(132);
		method433(x);
		writeWord(objectId);
		method432(y);
		System.out.println("clicked: " + objectId + " x: " + x + " y: " + y);
	}
	/**
	 * Use this to send any command, servers don't detect typing, so it just sends the packet for it.
	 * No anti-ban is ftw.
	 * @param name
	 * @author Austin
	 */
	public void sendCommand(String name) {
		createFrame(103);
		writeWordBigEndian(name.length() + 1);
		writeString(name);
		System.out.println("Sent Command: " + name);
	}
	
	public void clickFishSpot(int slotId) {
		fakeMouse();
		createFrame(155);
	method431(slotId);
	
	}
	public void writeWordBigEndian(int i)
	{
		buffer[currentOffset++] = (byte)i;
	}

	public void writeWord(int i)
	{
		buffer[currentOffset++] = (byte)(i >> 8);
		buffer[currentOffset++] = (byte)i;
	}

	public void method400(int i)
	{
		buffer[currentOffset++] = (byte)i;
		buffer[currentOffset++] = (byte)(i >> 8);
	}

	public void writeDWordBigEndian(int i)
	{
		buffer[currentOffset++] = (byte)(i >> 16);
		buffer[currentOffset++] = (byte)(i >> 8);
		buffer[currentOffset++] = (byte)i;
	}

	public void writeDWord(int i)
	{
		buffer[currentOffset++] = (byte)(i >> 24);
		buffer[currentOffset++] = (byte)(i >> 16);
		buffer[currentOffset++] = (byte)(i >> 8);
		buffer[currentOffset++] = (byte)i;
	}

	public void method403(int j)
	{
		buffer[currentOffset++] = (byte)j;
		buffer[currentOffset++] = (byte)(j >> 8);
			buffer[currentOffset++] = (byte)(j >> 16);
			buffer[currentOffset++] = (byte)(j >> 24);
	}

	public void writeQWord(long l)
	{
		try
		{
			buffer[currentOffset++] = (byte)(int)(l >> 56);
			buffer[currentOffset++] = (byte)(int)(l >> 48);
			buffer[currentOffset++] = (byte)(int)(l >> 40);
			buffer[currentOffset++] = (byte)(int)(l >> 32);
			buffer[currentOffset++] = (byte)(int)(l >> 24);
			buffer[currentOffset++] = (byte)(int)(l >> 16);
			buffer[currentOffset++] = (byte)(int)(l >> 8);
			buffer[currentOffset++] = (byte)(int)l;
		}
		catch(RuntimeException runtimeexception)
		{
			signlink.reporterror("14395, " + 5 + ", " + l + ", " + runtimeexception.toString());
			throw new RuntimeException();
		}
	}

	public void writeString(String s)
	{
		//s.getBytes(0, s.length(), buffer, currentOffset);	//deprecated
		System.arraycopy(s.getBytes(), 0, buffer, currentOffset, s.length());
		currentOffset += s.length();
		buffer[currentOffset++] = 10;
	}

	public void writeBytes(byte abyte0[], int i, int j)
	{
		for(int k = j; k < j + i; k++)
			buffer[currentOffset++] = abyte0[k];

	}
	public int method419(int i, int z) {
		return readBits(z - i);
	}
	public void writeBytes(int i)
	{
		buffer[currentOffset - i - 1] = (byte)i;
	}
	public int method408() {
		return readUnsignedByte();
	}
	public int readUnsignedByte()
	{
		return buffer[currentOffset++] & 0xff;
	}

	public byte readSignedByte()
	{
		return buffer[currentOffset++];
	}

	public int readUnsignedWord()
	{
		currentOffset += 2;
		return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
	}

	public int readSignedWord()
	{
		currentOffset += 2;
		int i = ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
		if(i > 32767)
			i -= 0x10000;
		return i;
	}

	public int read3Bytes()
	{
		currentOffset += 3;
		return ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
	}

	public int readDWord()
	{
		currentOffset += 4;
		return ((buffer[currentOffset - 4] & 0xff) << 24) + ((buffer[currentOffset - 3] & 0xff) << 16) + ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] & 0xff);
	}

	public long readQWord()
	{
		long l = (long) readDWord() & 0xffffffffL;
		long l1 = (long) readDWord() & 0xffffffffL;
		return (l << 32) + l1;
	}

	public String readString()
	{
		int i = currentOffset;
		while(buffer[currentOffset++] != 10) ;
		return new String(buffer, i, currentOffset - i - 1);
	}

	public byte[] readBytes()
	{
		int i = currentOffset;
		while(buffer[currentOffset++] != 10) ;
		byte abyte0[] = new byte[currentOffset - i - 1];
		System.arraycopy(buffer, i, abyte0, i - i, currentOffset - 1 - i);
		return abyte0;
	}

	public void readBytes(int i, int j, byte abyte0[])
	{
		for(int l = j; l < j + i; l++)
			abyte0[l] = buffer[currentOffset++];
	}

	public void initBitAccess()
	{
		bitPosition = currentOffset * 8;
	}

	public int readBits(int i)
	{
		int k = bitPosition >> 3;
		int l = 8 - (bitPosition & 7);
		int i1 = 0;
		bitPosition += i;
		for(; i > l; l = 8)
		{
			i1 += (buffer[k++] & anIntArray1409[l]) << i - l;
			i -= l;
		}
		if(i == l)
			i1 += buffer[k] & anIntArray1409[l];
		else
			i1 += buffer[k] >> l - i & anIntArray1409[i];
		return i1;
	}

	public void finishBitAccess()
	{
		currentOffset = (bitPosition + 7) / 8;
	}

	public int method421()
	{
		int i = buffer[currentOffset] & 0xff;
		if(i < 128)
			return readUnsignedByte() - 64;
		else
			return readUnsignedWord() - 49152;
	}

	public int method422()
	{
		int i = buffer[currentOffset] & 0xff;
		if(i < 128)
			return readUnsignedByte();
		else
			return readUnsignedWord() - 32768;
	}

	public void doKeys()
	{
		int i = currentOffset;
		currentOffset = 0;
		byte abyte0[] = new byte[i];
		readBytes(i, 0, abyte0);
		BigInteger biginteger2 = new BigInteger(abyte0);
		BigInteger biginteger3 = biginteger2/*.modPow(biginteger, biginteger1)*/;
		byte abyte1[] = biginteger3.toByteArray();
		currentOffset = 0;
		writeWordBigEndian(abyte1.length);
		writeBytes(abyte1, abyte1.length, 0);
	}

	public void method424(int i)
	{
		buffer[currentOffset++] = (byte)(-i);
	}

	public void method425(int j)
	{
		buffer[currentOffset++] = (byte)(128 - j);
	}

	public int method426()
	{
			return buffer[currentOffset++] - 128 & 0xff;
	}

	public int method427()
	{
		return -buffer[currentOffset++] & 0xff;
	}

	public int method428()
	{
		return 128 - buffer[currentOffset++] & 0xff;
	}

	public byte method429()
	{
			return (byte)(-buffer[currentOffset++]);
	}

	public byte method430()
	{
		return (byte)(128 - buffer[currentOffset++]);
	}

	public void method431(int i)
	{
		buffer[currentOffset++] = (byte)i;
		buffer[currentOffset++] = (byte)(i >> 8);
	}

	public void method432(int j)
	{
		buffer[currentOffset++] = (byte)(j >> 8);
		buffer[currentOffset++] = (byte)(j + 128);
	}

	public void method433(int j)
	{
		buffer[currentOffset++] = (byte)(j + 128);
		buffer[currentOffset++] = (byte)(j >> 8);
	}

	public int method434()
	{
		currentOffset += 2;
			return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
	}

	public int method435()
	{
		currentOffset += 2;
		return ((buffer[currentOffset - 2] & 0xff) << 8) + (buffer[currentOffset - 1] - 128 & 0xff);
	}

	public int method436()
	{
		currentOffset += 2;
		return ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff);
	}

	public int method437()
	{
		currentOffset += 2;
		int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
		if(j > 32767)
			j -= 0x10000;
		return j;
	}

	public int method438()
	{
		currentOffset += 2;
		int j = ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] - 128 & 0xff);
		if(j > 32767)
			j -= 0x10000;
		return j;
	}

	public int method439()
	{
			currentOffset += 4;
			return ((buffer[currentOffset - 2] & 0xff) << 24) + ((buffer[currentOffset - 1] & 0xff) << 16) + ((buffer[currentOffset - 4] & 0xff) << 8) + (buffer[currentOffset - 3] & 0xff);
	}

	public int method440()
	{
		currentOffset += 4;
		return ((buffer[currentOffset - 3] & 0xff) << 24) + ((buffer[currentOffset - 4] & 0xff) << 16) + ((buffer[currentOffset - 1] & 0xff) << 8) + (buffer[currentOffset - 2] & 0xff);
	}

	public void method441(int i, byte abyte0[], int j)
	{
		for(int k = (i + j) - 1; k >= i; k--)
			buffer[currentOffset++] = (byte)(abyte0[k] + 128);

	}

	public void method442(int i, int j, byte abyte0[])
	{
		for(int k = (j + i) - 1; k >= j; k--)
			abyte0[k] = buffer[currentOffset++];

	}

	public byte buffer[];
	public int currentOffset;
	public int bitPosition;
	private static final int[] anIntArray1409 = {
		0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 
		1023, 2047, 4095, 8191, 16383, 32767, 65535, 0x1ffff, 0x3ffff, 0x7ffff, 
		0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 
		0x3fffffff, 0x7fffffff, -1
	};
	public ISAACRandomGen encryption;
	private static int anInt1412;
	private static final NodeList nodeList = new NodeList();

	//removed useless static initializer
}
